<html>
  <head></head>
  <body>
    <p>原型链继承</p>
    <script>
      function Friend(name, age) {
        //构造函数
        this.name = "name";
        this.age = age;
      }
      Friend.prototype.showName = function() {
        console.log(this.name);
      };

      //继承 如果我们想把被传入的函数对象里this的指针指向外部字面量定义的对象，那么我们就是用apply和call
      function GirlFriend(name, age) {
        // 继承属性
        Friend.call(this, name, age);
        this.city = "青岛";
      }
      // 继承方法
      GirlFriend.prototype = new Friend(); //此时 GirlFriend.prototype 中的 constructor 被重写了，会导致 GirlFriend.prototype.constructor === Friend
      GirlFriend.prototype.constructor = GirlFriend; //需要修复构造函数指向的。

      GirlFriend.prototype.showCity = function() {
        console.log(this.city);
      };

      var friend = new Friend("韩商言", 26);
      var girlFriend = new GirlFriend("佟年", 25);
      friend.showName(); // 韩商言
      girlFriend.showName(); // 佟年
      girlFriend.showCity(); // 青岛
      console.log(girlFriend.name); // 佟年
      console.log(girlFriend.city); // 青岛
    </script>
  </body>
</html>
